package com.fanjia.rabbitmq_java.work.polling;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author fanjia
 * @className Producer
 * @description TODO
 * @date 2021/4/17 15:04
 */
public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //tcp/ip amqp是再tcp/ip再次封装的一种消息协议

        //1.创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.130.114");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        connectionFactory.setVirtualHost("/");//把我们的消息发在根目录下。

        Connection connection = null;
        Channel channel = null;
        //2.创建连接 connection
        connection = connectionFactory.newConnection("生产者");
        //3.通过连接获取通道channel
        channel = connection.createChannel();
        //4.通过创建交换机，声明队列，绑定关系，路由key,发送消息，和接收消息
        String queueName = "fanjia11";
        /*
         *@params1  队列的名称
         *@params2  是否要持久化durable=false 所谓持久化消息是否存盘，如果false, 非持久化 true是持久化？非持久化会存盘吗？
         *@params3  排他性，是否独占
         *@params4  是否自动删除，随着最后一个消费者消息以后是否把队列自动删除
         *@params5  携带附属参数。
         **/
        channel.queueDeclare(queueName,false,false,false,null);


        //5.准备消息内容
        for(int i=0;i<20;i++){
            String message = "Hello rabbitmq"+i;
            //6.发送消息给队列 queue
            channel.basicPublish("",queueName,null,message.getBytes());

        }
        System.out.println("发送消息成功");
        //7.关闭连接
        if(connection != null && connection.isOpen()){
            connection.close();
        }

        //8.关闭通道
        if(channel != null && channel.isOpen()){
            channel.close();
        }

    }
}
